//Copyright (c) 2006-2007 Microsoft Corporation.  All rights reserved
using System;
using System.Configuration;
using System.Collections.Generic;

using InvocationFramework.Common.Instrumentation;
using InvocationFramework.Common.Resources;

namespace InvocationFramework.Core.Configuration
{
    /// <summary>
    /// Helper para acceder a la configuracion
    /// </summary>
    internal class ConfigurationHelper
    {
        #region Private Vars

        /// <summary>
        /// Variable que contiene la configuracion
        /// </summary>
        private readonly ConfigurationInformation _config;

        #endregion

        #region Constructors

        /// <summary>
        /// Constructor por defecto
        /// </summary>
        public ConfigurationHelper( )
        {
            try
            {
                _config = ConfigurationManager.GetSection( "servicesInvocationFramework" ) as ConfigurationInformation;
            }
            catch ( Exception ex )
            {
                TraceHelper.Error( ex, Texts.ConfigurationHelperInitError );
                throw;
            }
        }

        #endregion

        #region Properties

        /// <summary>
        /// Indica si publican o no los performance counters
        /// </summary>
        /// <remarks>
        /// Si se omite en la configuracion el catalogo local esta activado 
        /// </remarks>
        public bool EnablePerformanceCounters
        {
            get
            {
                return _config.EnablePerformanceCounters;
            }
        }

        /// <summary>
        /// Indica si se mantiene o no un catalogo local de servicios
        /// </summary>
        /// <remarks>
        /// Si se omite en la configuracion el catalogo local esta activado 
        /// </remarks>
        public bool EnableLocalCatalog
        {
            get
            {
                return _config.EnableLocalCatalog;
            }
        }

        /// <summary>
        /// Intervalo, en minutos, en los que se invalida el catalogo local de servicios
        /// </summary>
        /// <remarks>
        /// Si se omite en la configuracion o el valor es cero o menor no se invalida el catalogo
        /// </remarks>
        public double LocalCatalogInvalidationInterval
        {
            get
            {
                return _config.LocalCatalogInvalidationInterval;
            }
        }

        /// <summary>
        /// Coleccion con los adaptadores configurados para el cliente
        /// </summary>
        public List<AdapterElement> CallerAdapters
        {
            get
            {
                return _config.CallerAdapters;
            }
        }

        /// <summary>
        /// Coleccion con los adaptadores configurados para el publicador
        /// </summary>
        public List<AdapterElement> PublisherAdapters
        {
            get
            {
                return _config.PublisherAdapters;
            }
        }

        #endregion
    }
}